接著前一篇的介紹,我們可以發現,如果我們要使用index,會需要幾個步驟
在原文中,提到的是三個步驟,但因為他有介紹B+樹的內容,所以會有三步
(1) the tree traversal; (2) following the leaf node chain; (3) fetching the table data.
所以可以發現,如果要讓query變快,可以透過下面幾個方法
phone | diskAddress |
---|---|
0908070605 | 0x13579 |
0912333555 | 0x12345 |
0912345178 | 0x56789 |
因為他有依照由前往後,由小到大的排序,所以如果我們希望找到"0912"開頭的,很容易就可以找到
但如果這時候我們想找"555"結尾的,這個index就會派不上用場,只能從頭找到最後一筆,就會很沒有效率
也可以參考官方的例子,附上連結
https://use-the-index-luke.com/sql/where-clause/searching-for-ranges/like-performance-tuning#fig-like
在index的建立中,除了可以針對一個欄位全部做index,也可以針對特定條件做index
比如說,我的index條件可以設定為,在近三個月內創建的資料建立index(現在是2024/09/12)
id | phone | name | created_at |
---|---|---|---|
5 | 0908070605 | user5 | 2024-08-15 14:25:00 |
1 | 0912333555 | user1 | 2024-01-22 09:10:45 |
3 | 0912345678 | user3 | 2023-12-05 18:35:20 |
6 | 0912999888 | user6 | 2024-06-30 08:00:10 |
7 | 0922111333 | user7 | 2024-04-12 17:22:33 |
8 | 0933444555 | user8 | 2024-03-28 11:15:50 |
9 | 0944555666 | user9 | 2023-10-30 13:45:25 |
10 | 0955666777 | user10 | 2024-05-18 22:50:12 |
11 | 0966777888 | user11 | 2024-07-05 07:35:40 |
那這時候,你的index就會變的很小,從原本要找9筆資料,變成
id | phone | name | created_at |
---|---|---|---|
5 | 0908070605 | user5 | 2024-08-15 14:25:00 |
11 | 0966777888 | user11 | 2024-07-05 07:35:40 |
就瞬間剩下兩筆資料
這種情境的適用場景很多,比如訂單系統希望可以把代出貨的資料特別建立index,因為這些資料最常被搜尋
Ref:
https://use-the-index-luke.com/sql/where-clause